# -*- coding: utf-8 -*-
"""
@Time ： 2024/1/23 21:10
@Auth ： 狗头老道
@File ：ResizeRaster.py
@IDE ：PyCharm
@Purpose ：基于GDAL批量重采样tif格式栅格，在做某些研究过程中，通过
研究通常会涉及到多源数据，需要进行基于像元的运算，在此之前需要对数据进行地理配准、空间配准、重采样等操作。
那么当不同来源，不同分辨率的数据重采样为同一空间分辨率之后，各个像元不一一对应，有偏移该怎么办呢？
在ArcGIS进行重采样操作时（resample 或者project raster）可以通过设置Environment -->
Processing Extent --> Snap Raster 为参考栅格数据，解决这一问题。
但面对大批量数据的时候，我们希望通过编程解决这一问题，下面分享gdal中对这一问题的解决思路。'''
"""
# -*- coding: utf-8 -*-

from osgeo import gdal
import os
import time


#  批量重采样
def Resize_batch(in_tifFolder, out_tifFolder, width, height, prefix=""):
    """
    重采样批量处理函数

    :param in_tifFolder: 需要重采样tif文件的文件夹
    :param out_tifFolder: 输出tif文件的文件夹
    :param width: 输入参考栅格文件的宽度，X
    :param height: 输入参考栅格文件的高度，Y
    :param prefix: 重采样文件的前缀
    :return:    """

    #  获取文件夹内的文件名
    tifNameList = os.listdir(in_tifFolder)
    for i in range(len(tifNameList)):
        #  判断当前文件是否为tif文件
        if (os.path.splitext(tifNameList[i])[1] == ".tif"):
            tifPath = in_tifFolder + "/" + tifNameList[i]

            resize(tifPath, out_tifFolder, width, height, prefix)
            # dataset = gdal.Open(tifPath)
            # gdal.Warp(out_tifFolder + "\\" + prefix + os.path.splitext(tifNameList[i])[0] + ".tif",
            #           dataset, format='GTiff',width=width, height=height)
            # '''gdal.Warp(os.path.splitext(tifNameList[i])[0] + "_LSTwarp.tif",
            #           dataset, width, height, cutlineDSName=r"E:\Remote_Sensing_Data\TVDI\mask\mask.shp",cropToCutline=True)'''
            # print(prefix + os.path.splitext(tifNameList[i])[0] + ".tif wraped successfully!")

def resize(in_tif, out_tifFolder, width, height, prefix=""):
    dataset = gdal.Open(in_tif)
    gdal.Warp(out_tifFolder + "\\" + prefix + os.path.splitext(os.path.basename(in_tif))[0] + ".tif",
              dataset, format='GTiff', width=width, height=height)
    print(prefix + os.path.splitext(in_tif)[0] + ".tif wraped successfully!")

if __name__ == "__main__":
    # 直接执行函数
    start = time.perf_counter()  # 开始时间
    in_path = r"F:\test\NDVI"  # 输入栅格路径
    out_path = r"F:\test\NDVI2"  # 输出栅格路径

    if not os.path.exists(out_path):
        os.makedirs(out_path)

    Resize_batch(in_path, out_path, 1602, 1442, prefix="") #width, height，需要有参考栅格文件，以这个文件为标准，重采样
    end = time.perf_counter()  # 结束时间
    print('finish')
    print('Running time: %s Seconds' % (end - start))
    # 展示程序运行时间
